home *** CD-ROM | disk | FTP | other *** search
/ Aminet 33 / Aminet 33 - October 1999.iso / Aminet / util / misc / VMM_src.lha / VMM / tools / showpagesize.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-12-16  |  4.5 KB  |  166 lines

  1. #include <exec/types.h>
  2. #include <exec/execbase.h>
  3. #include <clib/exec_protos.h>
  4. #include <clib/dos_protos.h>
  5. #ifdef __GNUC__
  6. #include "../shared_defs.h"
  7. #include "../protos.h"
  8. #include "../mmu_bits30.h"
  9. #else
  10. #include "/shared_defs.h"
  11. #include "/protos.h"
  12. #include "/mmu_bits30.h"
  13. #endif
  14. void printf (char*, ...);
  15.  
  16. /* ShowPageSize determines the possible pagesize on a system.
  17.  * It prints an information text to this fact and sets the 
  18.  * return code appropriately.
  19.  * Return code == 1 means 4K is possible
  20.  * Return code == 2 means 8K is possible
  21.  * Return code == 3 means moth sizes are possible
  22.  */
  23.  
  24. extern struct ExecBase *SysBase;
  25.  
  26. #define TC40_ENABLE 0x8000
  27. #define TC40_PAGE8K 0x4000
  28.  
  29.  
  30. int main (void)
  31.  
  32. {
  33. struct MMUState30 MMUState30;
  34. struct MMUState40 MMUState40;
  35. BOOL Page4K,
  36.      Page8K;
  37. int ret_val = 0;
  38.  
  39. /* 68040 and 68060 are the same here */
  40. if (SysBase->AttnFlags & AFF_68040)
  41.   {
  42.   ReadMMUState40 (&MMUState40);
  43.   if (MMUState40.TC & TC40_ENABLE)
  44.     {
  45.     if (MMUState40.TC & TC40_PAGE8K)
  46.       {
  47.       Page8K = TRUE;
  48.       Page4K = FALSE;
  49.       }
  50.     else
  51.       {
  52.       Page8K = FALSE;
  53.       Page4K = TRUE;
  54.       }
  55.     }
  56.   else
  57.     {
  58.     Page8K = TRUE;
  59.     Page4K = TRUE;
  60.     }
  61.   }
  62.  
  63. else if (SysBase->AttnFlags & AFF_68030)
  64.  
  65.   {
  66.   ReadMMUState30 (&MMUState30);
  67.   if (MMUState30.TC & (MAKE_MASK(TC_E, TC_E, 1L ) |
  68.                        MAKE_MASK( TC_SRE, TC_SRE, 0L ) |
  69.                        MAKE_MASK( TC_FCL, TC_FCL, 0L ) |
  70.                        MAKE_MASK( TC_PS_START, TC_PS_END, 12) |  /* 4K pages */
  71.                        MAKE_MASK( TC_IS_START, TC_IS_END, 0L ) |
  72.                        MAKE_MASK( TC_TIA_START, TC_TIA_END, LEVEL_A_BITS ) |
  73.                        MAKE_MASK( TC_TIB_START, TC_TIB_END, LEVEL_B_BITS ) |
  74.                        MAKE_MASK( TC_TIC_START, TC_TIC_END, 6) |
  75.                        MAKE_MASK( TC_TID_START, TC_TID_END, 0L )))
  76.     {
  77.     Page8K = FALSE;
  78.     Page4K = TRUE;
  79.     }
  80.   else if (MMUState30.TC & (MAKE_MASK(TC_E, TC_E, 1L ) |
  81.                        MAKE_MASK( TC_SRE, TC_SRE, 0L ) |
  82.                        MAKE_MASK( TC_FCL, TC_FCL, 0L ) |
  83.                        MAKE_MASK( TC_PS_START, TC_PS_END, 13) |  /* 8K pages */
  84.                        MAKE_MASK( TC_IS_START, TC_IS_END, 0L ) |
  85.                        MAKE_MASK( TC_TIA_START, TC_TIA_END, LEVEL_A_BITS ) |
  86.                        MAKE_MASK( TC_TIB_START, TC_TIB_END, LEVEL_B_BITS ) |
  87.                        MAKE_MASK( TC_TIC_START, TC_TIC_END, 5) |
  88.                        MAKE_MASK( TC_TID_START, TC_TID_END, 0L )))
  89.     {
  90.     Page8K = TRUE;
  91.     Page4K = FALSE;
  92.     }
  93.   else
  94.     {
  95.     Page8K = TRUE;
  96.     Page4K = TRUE;
  97.     }
  98.   }
  99.  
  100. else if ((SysBase->AttnFlags & AFF_68020) && MMU68851)
  101.  
  102.   {
  103.   ReadMMUState851 (&MMUState30);
  104.   if (MMUState30.TC & (MAKE_MASK(TC_E, TC_E, 1L ) |
  105.                        MAKE_MASK( TC_SRE, TC_SRE, 0L ) |
  106.                        MAKE_MASK( TC_FCL, TC_FCL, 0L ) |
  107.                        MAKE_MASK( TC_PS_START, TC_PS_END, 12) |  /* 4K pages */
  108.                        MAKE_MASK( TC_IS_START, TC_IS_END, 0L ) |
  109.                        MAKE_MASK( TC_TIA_START, TC_TIA_END, LEVEL_A_BITS ) |
  110.                        MAKE_MASK( TC_TIB_START, TC_TIB_END, LEVEL_B_BITS ) |
  111.                        MAKE_MASK( TC_TIC_START, TC_TIC_END, 6) |
  112.                        MAKE_MASK( TC_TID_START, TC_TID_END, 0L )))
  113.     {
  114.     Page8K = FALSE;
  115.     Page4K = TRUE;
  116.     }
  117.   else if (MMUState30.TC & (MAKE_MASK(TC_E, TC_E, 1L ) |
  118.                        MAKE_MASK( TC_SRE, TC_SRE, 0L ) |
  119.                        MAKE_MASK( TC_FCL, TC_FCL, 0L ) |
  120.                        MAKE_MASK( TC_PS_START, TC_PS_END, 13) |  /* 8K pages */
  121.                        MAKE_MASK( TC_IS_START, TC_IS_END, 0L ) |
  122.                        MAKE_MASK( TC_TIA_START, TC_TIA_END, LEVEL_A_BITS ) |
  123.                        MAKE_MASK( TC_TIB_START, TC_TIB_END, LEVEL_B_BITS ) |
  124.                        MAKE_MASK( TC_TIC_START, TC_TIC_END, 5) |
  125.                        MAKE_MASK( TC_TID_START, TC_TID_END, 0L )))
  126.     {
  127.     Page8K = TRUE;
  128.     Page4K = FALSE;
  129.     }
  130.   else
  131.     {
  132.     Page8K = TRUE;
  133.     Page4K = TRUE;
  134.     }
  135.   }  
  136. else
  137.   {
  138.   printf ("You need a MMU to run this program\n");
  139.   return (10);
  140.   }
  141.  
  142. if (Page4K)
  143.   {
  144.   ret_val = 1;
  145.   printf ("A pagesize of 4K is usable on your system\n");
  146.   }
  147.  
  148. if (Page8K)
  149.   {
  150.   ret_val += 2;
  151.   printf ("A pagesize of 8K is usable on your system\n");
  152.   }
  153.  
  154. return (ret_val);
  155. }
  156.  
  157. void OrigColdReboot (void)         /* just a dummy for sv_regs30.asm */
  158.  
  159. {
  160. }
  161.  
  162. void PrintDebugMsg (char *string, unsigned long val)    /* just a dummy for sv_regs30.asm */
  163.  
  164. {
  165. }
  166.